1 /* 2 Copyright: Marcelo S. N. Mancini (Hipreme|MrcSnm), 2018 - 2021 3 License: [https://creativecommons.org/licenses/by/4.0/|CC BY-4.0 License]. 4 Authors: Marcelo S. N. Mancini 5 6 Copyright Marcelo S. N. Mancini 2018 - 2021. 7 Distributed under the CC BY-4.0 License. 8 (See accompanying file LICENSE.txt or copy at 9 https://creativecommons.org/licenses/by/4.0/ 10 */ 11 module hip.view.testscene; 12 version(Test): 13 14 import hip.graphics.g2d.geometrybatch; 15 import hip.hiprenderer.shader; 16 import hip.hiprenderer; 17 import hip.hiprenderer.viewport; 18 import hip.view.scene; 19 import hip.math.utils; 20 21 class TestScene : Scene, IHipPreloadable 22 { 23 import hip.api; 24 25 mixin Preload; 26 27 //Lower Level API. Not available in the Scripting API 28 GeometryBatch geom; 29 Shader shader; 30 31 IHipFont smallFont; 32 IHipFont bigFont; 33 34 @Asset("sounds/pop.wav") 35 __gshared IHipAudioClip pop; 36 37 38 AHipAudioSource src; 39 40 import hip.graphics.g2d.particles; 41 HipParticleSystem sys; 42 43 44 float x = 100, y = 100; 45 46 override void initialize() 47 { 48 logg(getAssetsForPreload); 49 // logg(pop is null); 50 geom = new GeometryBatch(null, 5000, 5000); 51 geom.setColor(HipColor.green); 52 53 setWindowSize(HipRenderer.width, HipRenderer.height); 54 src = HipAudio.getSource(); 55 src.clip = pop; 56 57 58 smallFont = HipDefaultAssets.getDefaultFontWithSize(20); 59 bigFont = HipDefaultAssets.getDefaultFontWithSize(64); 60 61 sys = new HipParticleSystem(500); 62 sys.config.colors = [HipColorStop(HipColor.red, 0), HipColorStop(HipColor(0x000000ff), 0.2)]; 63 sys.config.velocityYInit = ValueRange(0, -300); 64 sys.setEmissionZone(100, 150, 100, 150); 65 } 66 override void update(float dt) 67 { 68 super.update(dt); 69 if(HipInput.areGamepadButtonsJustPressed([HipGamepadButton.psSquare, HipGamepadButton.psTriangle])) 70 logg("Button combination pressed!"); 71 72 auto v = HipInput.getAnalog(HipGamepadAnalogs.leftStick); 73 74 x+= dt*400*v[0]; 75 y+= dt*400*v[1]; 76 77 if(HipInput.isMouseButtonJustReleased(HipMouseButton.left)) 78 { 79 src.play(); 80 if(HipInput.isDoubleClicked(HipMouseButton.left)) 81 logg("Double clicked"); 82 else 83 logg("You just clicked me!"); 84 } 85 86 if(HipInput.isKeyJustPressed(HipKey.ENTER)) 87 { 88 logg("Don't press ENTER!"); 89 } 90 sys.update(dt); 91 } 92 93 override void render() 94 { 95 //////////////////////Lower Level//////////////////////// 96 super.render(); 97 geom.setColor(HipColor.red); 98 geom.fillRectangle(0, 0, 200, 200); 99 geom.setColor(HipColor.green); 100 geom.fillRectangle(0, 0, 100, 100); 101 geom.flush(); 102 103 104 //Use a non GC allocating string on render (String) for drawing the mousePosition 105 import hip.util.string; 106 float[2] mousePos = HipInput.getMousePosition(); 107 setFont(smallFont); 108 String s = String(mousePos); 109 drawText(s.toString, cast(int)mousePos[0], cast(int)mousePos[1]); 110 111 112 113 ////////////////////////Higher Level//////////////////////// 114 setGeometryColor(HipColor.white); 115 setFont(null); 116 drawText("Hello World Test Scene (Default Font)", 300, 280, HipColor.white, HipTextAlign.LEFT, HipTextAlign.TOP); 117 fillRectangle(cast(int)x, cast(int)y, 100, 100); 118 119 drawText("Null Textures uses that sprite over here", 300, 480, HipColor.white, HipTextAlign.LEFT, HipTextAlign.TOP); 120 fillRectangle(cast(int)x+200, cast(int)y, 100, 100); 121 drawTexture(null, 300, 500); 122 123 sys.draw(); 124 125 } 126 }